package com.zzit.vjv.util;

import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.*;

/**
 * 文件上传帮助类(用于单个文件)
 */
public class FileUtil {


    /**
     * @param myfile     上传文件的数据
     * @param request    请求:用于获取本地文件夹上下文
     * @param folderName 文件夹名称:用于命名新建的文件夹名称
     * @return
     */
    public static Map numerousFile(MultipartFile myfile, HttpServletRequest request, String folderName) throws IOException {


        //用于存储相对路径,与绝对路径
        Map<String, Object> map = new HashMap<>();


        if (myfile.isEmpty()) {

            System.out.println("没有文件数据");

        } else {

            System.out.println("文件长度: " + myfile.getSize() + "B");
            System.out.println("文件类型: " + myfile.getContentType());
            System.out.println("文件原名: " + myfile.getOriginalFilename());
            System.out.println("========================================");

            String uploadFileName = myfile.getOriginalFilename();

            //截取文件扩展名
            String extendName = uploadFileName.substring(uploadFileName.lastIndexOf(".") + 1, uploadFileName.length());

            System.out.println("被截取的文件扩展名:" + extendName);

            //把文件加上随机数，防止文件重复
            String uuid = UUID.randomUUID().toString().replace("-", "").toUpperCase();

            System.out.println("设定的随机数" + uuid);

            //给文件重新命名，防止出现重复，文件名称中文乱码
            String fileName = uuid + "." + extendName;


            //获取设置上传文件的目标位置
            String realPath = request.getSession().getServletContext().getRealPath("/" + folderName);
            System.out.println(realPath + "111111111111");

            //解决同一文件夹中文件过多问题
            String datePath = new SimpleDateFormat("yyyy-MM-dd").format(new Date());


            //  System.out.println("相对路径》》》》》》》》》》》》》"+sb.toString());

            //判断路径是否存在
            File file = new File(realPath + "/" + datePath);
            //如果目录不存在就创建目录
            if (!file.exists()) {
                file.mkdirs();
            }

            //使用 MulitpartFile 接口中方法，把上传的文件写到指定位置
            myfile.transferTo(new File(file, fileName));


            //字符串拼接相对文件地址
            StringBuffer sb = new StringBuffer();

            sb.append("\\");
            sb.append(folderName);
            sb.append("\\");
            sb.append(datePath);
            sb.append("\\");
            sb.append(fileName);


            //相对路径
            map.put("xd", sb.toString());
            //绝对路径
            map.put("jd", file);


        }


        return map;
    }

}
